package br.gendi.core;

import java.net.URL;
import java.util.ArrayList;

import HTTPClient.HTTPConnection;
import HTTPClient.HTTPResponse;
import HTTPClient.NVPair;
import br.gendi.beans.BaseGenomica;
import br.gendi.beans.Parametros;

public class Conectividade {

	public static String cortarHTML(String html, String site) throws Exception {
		int inicio = html.indexOf("location.replace(") + 19;
		int fim = html.lastIndexOf("\")");
		return site + html.substring(inicio, fim);

		
		
	}

	public static String retornarHTML(String texto) throws Exception {
		HTTPResponse rsp = null;
		HTTPConnection con = null;
		String site = "http://www.cbs.dtu.dk/";

		con = new HTTPConnection(new URL("http://www.cbs.dtu.dk/services/NetMHC/"));
		if (Configuracoes.isProxyAtivo())
			con.setCurrentProxy(Configuracoes.getHost(), Integer.parseInt(Configuracoes.getPort()));

		NVPair[] post = { 
				new NVPair("configfile", "/usr/opt/www/pub/CBS/services/NetMHC-3.0/NetMHC.cf"), 
				new NVPair("SEQPASTE", texto),
				new NVPair("peplen", "9"),
				new NVPair("alleles", "A0101")
		};

		rsp = con.Post("/cgi-bin/webface", post);

		String retorno = rsp.getText();
		String ret2 = cortarHTML(retorno, site);
		return ret2;
	}

	public static String retornarHTMLEpijen(String texto) throws Exception {
		HTTPResponse rsp = null;
		HTTPConnection con = null;

		con = new HTTPConnection(new URL("http://www.jenner.ac.uk/scripts/"));
		if (Configuracoes.isProxyAtivo())
			con.setCurrentProxy(Configuracoes.getHost(), Integer.parseInt(Configuracoes.getPort()));

		NVPair[] post = {
				new NVPair("seq", texto),
				new NVPair("dna", ""),
				new NVPair("orf", "3"),
				new NVPair("HLA", "A0101"),
				new NVPair("tcut", "5"),
				new NVPair("output", "0.05"),
				new NVPair("submit", "Submit")
		};

		rsp = con.Get("/../scripts/additive3in1.pl", post);

		String retorno = rsp.getText();
		return retorno;
	}
		
	/** novidades **/
	//TODO: Baixar todo o site e trocar os elementos e depois dar um submit.
	public static String retornarHTMLGerar(String texto, BaseGenomica base) throws Exception {
		
		HTTPResponse rsp = null;
		HTTPConnection con = null;
		
		con = new HTTPConnection(new URL(base.getUrl()));
		if (Configuracoes.isProxyAtivo())
			con.setCurrentProxy(Configuracoes.getHost(), Integer.parseInt(Configuracoes.getPort()));
		
		NVPair[] post = criarOutput(base, texto);

		System.out.println(post.length);
		
		
		if (base.getMetodos().equalsIgnoreCase("post")) {
			System.out.println("post!");
			rsp = con.Post(base.getFormAction(), post);
		} else {
			System.out.println("get!");
			rsp = con.Get(base.getFormAction(), post);
		}
		
		String retorno = rsp.getText();
		return retorno;
	}
	
	private static NVPair[] criarOutput(BaseGenomica base, String texto) {
		ArrayList<Parametros> param = base.getParametros();
		ArrayList<NVPair> post = new ArrayList<NVPair>();
		Parametros parametro = null;
		NVPair p = null;
		String valor = null;
		
		for (int i=0;i<param.size(); i++) {
			parametro = param.get(i);
			
			if (parametro.getValorAtual() == null)
				valor = parametro.getValorPadrao();
			else
				valor = parametro.getValorAtual();

			p = new NVPair(parametro.getNome(), valor);
			
			if (valor != null) {
				if (valor.equalsIgnoreCase("<i>"))
					valor = texto;
			}
			
			if (valor != null)
				if (valor.length() != 0) {
					post.add(p);
					System.out.println(parametro.getNome() + " ---> " + valor);
				}
		}
		NVPair retorno[] = new NVPair[post.size()];
		post.toArray(retorno);
		return retorno;
	}
	
}
